//
//  QFUserAccountViewModel.swift
//  sinaWeibo
//
//  Created by apple on 16/2/28.
//  Copyright © 2016年 Qifeng Yan. All rights reserved.
//

import UIKit

class QFUserAccountViewModel: NSObject {
    
    // MARK: - 属性
    // 沙盒路径
    let userPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!.stringByAppendingString("/Account.plist")
    // 单例
    static let sharedInstance: QFUserAccountViewModel = QFUserAccountViewModel()
    
    // 定义一个用户属性 供外界调用
    var userAccount:QFUserAccount?
    
    // 判断用户是否登陆
    var isUserLogin: Bool {
        return userAccount != nil
    }
    
    // MARK: - 方法
    // 当单例第一次访问的时候就去沙盒解档账户信息
    private override init() {
        super.init()
        
        userAccount = loadUserAccout()
    }
    
    
    /// 调用方法加载请求
    func loadAccessToken(code: String,loadAccessTokenCallBack: (error: NSError?) -> ()) {
        // 发起请求获取 Accesstoken
        QFNetworkTool.sharedInstance.loadAccesstoken(code, accessTokenFinished: { (response, error) -> () in
            
            // 模拟失败
//            error = NSError(domain: "1", code: 1, userInfo: nil)
            
            if response == nil || error != nil {
                print("Accesstoken请求数据失败: \(error)") // 请求数据失败  直接返回
                // 告诉用户错误信息
                loadAccessTokenCallBack(error: error)
                return
            }
            
            print("Accesstoken请求数据成功: \(response)")
            self.userAccount = QFUserAccount(dict: response!) // 字典转模型
            
            // 保存到沙盒
            self.saveUserAccount()  // 注意 在闭包中调用 要使用 self
            // 将沙盒的userAccount 解档
            // 回调：告诉用户请求成功
            
            loadAccessTokenCallBack(error: nil)
        })
    }
    
    
    /// 将对象保存到沙盒
    private func saveUserAccount() {
        if userAccount != nil {
            NSKeyedArchiver.archiveRootObject(userAccount!, toFile: userPath)// 保存到沙盒
        }
    }
    
    /// 将对象从沙盒中解档
    private func loadUserAccout() -> QFUserAccount? {
        let account = NSKeyedUnarchiver.unarchiveObjectWithFile(userPath) as? QFUserAccount
        if account != nil && account?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
            print("账号没有过期：\(account?.expiresDate)")
            return account
        } else {
            return nil
        }
    }
    
    /// 加载用户信息
    func loadUserInfo(loadUserInfoCallBack: (error: NSError?) -> ()) {
        QFNetworkTool.sharedInstance.loadUserInfo { (result, error) -> () in
            if error != nil {
                print("获取用户信息失败:\(error)")
                loadUserInfoCallBack(error: error) // 返回错误信息
            }
            
//            print("获取用户信息成功：\(result)")
            
            // 获取到用户昵称
            self.userAccount?.screen_name = result?["screen_name"] as? String
            
            // 获取用户头像
            self.userAccount?.avatar_large = result?["avatar_large"] as? String
            
            // 保存起来
            self.saveUserAccount()
            
            loadUserInfoCallBack(error: nil) // 保存用户信息成功 没有错误
        }
    }
    
}
